草庐IT

c++ - constexpr 和 ODR

全部标签

c++ - 范围解析和 this 运算符

在我最近参加的(C++)类(class)中,老师提到使用->运算符比使用点符号和手动取消引用指针要慢一点(例如(*ptr)).这是真的吗?如果是,为什么?这是否也适用于C? 最佳答案 ->运算符既不比.运算符慢也不快。事实上,取消引用某些东西比仅仅访问内存位置要慢,因为还有一个间接的途径。这是生活中的一个事实,无论是在C和C++中还是在任何其他语言中。在C++中,您还有引用,因此您也可以使用.取消引用某些内容!所以这里的问题不是arrow-vs-dot,问题是编译器是否可以直接找到一个值,或者它是否必须先搜索它的地址。

c++ - ESP8266WebServer 在类中设置一个值

我在使用ESP8266WebServer时遇到了一些问题。我的WebServer{}类包裹在ESP8266WebServer对象周围,如下所示:头文件:#include#ifndefWebServer_h#defineWebServer_h#include"Arduino.h"classWebServer{public:WebServer();voidbegin();voidhandleClient();voidfinishedProcessingData(StringclientReply);StringqueryString;private://page/urlhandlersfr

c++ - 我们什么时候应该使用 RTLD_DEEPBIND?

我正在尝试链接中提到的问题:https://sourceware.org/ml/libc-alpha/2009-06/msg00168.html我对代码做了一些修改,如下所述:>>Catlibdep.c#includeintduplicate='u';intget_duplicate(){printf("libdepseesduplicateas:%c\n",duplicate);printf("libdepseesduplicateaddressas:%x\n",&duplicate);returnduplicate;}--------------------------------

c++ - 将函数内的大变量声明为 `static` 在性能上有什么不同吗?

不确定之前是否有人问过这个问题。在回答thisverysimplequestion时,我问自己以下内容。考虑一下:voidfoo(){inti{};constReallyAnyType[]data={item1,item2,item3,/*manyitemsthatmaybepotentiallyheavytorecreate,e.g.ofclasstype*/};/*functioncodehere...*/}现在理论上,每次控制达到功能时都会重新创建局部变量,对吗?IE。看看上面的inti-它肯定会在堆栈上重新创建。上面的数组呢?编译器能否聪明到优化它的创建只发生一次,还是我在这里

c++ - 如何为动态加载编写 MPI 包装器

由于MPI不提供二进制兼容性,仅提供源代码兼容性,因此我们不得不将我们的求解器源代码发送给客户,以便他们将我们的求解器与他们首选的MPI版本一起使用。好吧,我们已经到了无法再提供源代码的地步。因此,我正在寻找围绕MPI调用创建包装器的方法。我们的想法是为我们提供stub函数的header,用户将编写实现,从中创建一个动态库,然后我们的求解器将在运行时加载它。但是解决方案并不“优雅”并且容易出错。因为有struct参数(例如,MPI_Request),其struct定义可能因一个MPI实现而异,我们需要接受(void*)用于我们的许多stub参数。此外,如果一个MPI与另一个MPI的参数

c++ - 为什么在定义宏 ## 操作时有 2 层间接寻址

在下面的宏定义中,在真正的粘贴操作之前有两层间接:#defineMACRO_JOIN(a,b)MACRO_JOIN1(a,b)#defineMACRO_JOIN1(a,b)MACRO_JOIN2(a,b)#defineMACRO_JOIN2(a,b)a##b我知道我们需要MACRO_JOIN1,因为它没有粘贴或字符串化,所以它的参数可以先展开。但是第二个间接寻址MACRO_JOIN的目的到底是什么?在什么情况下MACRO_JOIN可以工作但MACRO_JOIN1会失败? 最佳答案 强制进行额外的扩展可能会有所不同,因为初始扩展会导致

c++ - clock_gettime( CLOCK_REALTIME .... ) 和 time() 之间有什么区别吗?

一个简单的问题:做time(...)和clock_gettime(CLOCK_REALTIME,...)理论上产生相同的时间(仅就秒而言)?我的意思是:time_tepoch;time(&epoch);和structtimespecspec;clock_gettime(CLOCK_REALTIME,&spec);这两个是否应该返回完全相同的结果(相对于秒数)?我用不断变化的时间和时区和epoch对此进行了“测试”和spec.tv_sec总是显示相同的结果,但CLOCK_REATIME的文档让我有点困惑,我不确定,他们总是一样的。现实世界的情况:我有一段代码,它使用了time.现在我想要

c++ - Winpcap - pcap_next_ex 与 pcap_loop

我有一个问题,假设我有一个线程可以捕获数据包并自行处理它们。使用pcap_next_ex:我会使用一个循环,我会在每次交互中处理数据包,假设我调用Sleep(200)来模拟这些东西。使用pcap_next_ex我会在丢失数据包的时刻到达。使用pcap_loop:我会为每个传入的数据包使用回调到数据包处理程序,它会像事件一样工作。在数据包处理程序中,我会处理数据包并假设我调用Sleep(200)来模拟这些东西。我会丢失数据包吗? 最佳答案 是的。pcap_next_ex和pcap_loop调用相同的内部函数,从环形缓冲区读取数据包。区

c++ - constexpr 递归函数是否使用 if constexpr

使用gcc(HEAD7.0.0201612)我惊讶地发现这有效:constexprlongvalue(constchar*definition){if(definition&&*definition){return*definition+value(definition+1);}return*definition;}intmain(){longl{};std::cin>>l;switch(l){casevalue("AAAA"):f1();break;casevalue("BBBB"):f2();break;default:error();break;}return0;}文字字符串"A

c++ - 无 ODR 使用的完美转发

考虑以下代码片段,就像写在头文件中一样:structFoo{//...};templateFoomakeFoo(Args&&...args){return{std::forward(args)...};}我可以用一些参数调用makeFoo,然后返回一个Foo。太好了。现在我要做的是用标签替换一些makeFoo的参数,看起来就像这样(仍在头文件中):constexprstructtag_type{usingtype=ActualType;}tag;应该在makeFoo中检测到这些标签,并在调用Foo的构造函数之前替换实际对象。所以调用看起来像:automyFoo=makeFoo("hi"